package com.jiangyg.mall.admin.service;

import com.jiangyg.mall.admin.dto.RoleDTO;
import com.jiangyg.mall.admin.vo.RoleVO;
import com.jiangyg.mall.core.support.restful.Pagination;

import java.util.List;

/**
 * 类描述：系统角色维护Service接口
 *
 * @author jiangyg
 * @version 2.0
 * @date 2020-08-08
 */
public interface RoleService {

    /**
     * 功能描述：分页查询用户创建的角色和被授权的角色信息，超级管理员查询所有的角色信息
     *
     * @param pagination 分页参数
     * @param userId     用户ID
     * @return 分页信息
     */
    Pagination<RoleVO> selectPagination(Pagination<RoleVO> pagination, Long userId) throws Exception;

    /**
     * 功能描述：查询用户角色列表
     *
     * @param userId 用户ID
     * @return 结果
     */
    List<RoleVO> selectRoleList(Long userId) throws Exception;

    /**
     * 功能描述：保存或者修改角色
     * <p>注意：只能修改自己创建的角色，超级管理员可以修改任意</p>
     *
     * @param dto    角色信息
     * @param userId 用户ID
     * @return 返回是否操作成功 boolean
     */
    boolean saveOrUpdate(RoleDTO dto, Long userId) throws Exception;

    /**
     * 功能描述：根据ID获取角色信息
     *
     * @param roleId 角色ID
     * @return 返回角色信息
     */
    RoleVO selectById(Long roleId) throws Exception;

    /**
     * 功能描述：删除角色
     *
     * @param roleIds 角色ID
     * @return 返回是否操作成功 boolean
     */
    boolean delete(List<Long> roleIds);

    /**
     * 功能描述：根据角色ID查询其下的授权资源
     *
     * @param roleId 角色ID
     * @return 授权资源
     */
    List<String> selectResourcesById(Long roleId);

    /**
     * 功能描述：检查用户是否有修改该角色的权限
     *
     * @param roleId 角色ID
     * @param userId 用户ID
     * @return 是否有权限
     */
    boolean haveUpdatePermission(Long roleId, Long userId);

}
